package com.zc.common;

import as.leap.vertx.rpc.RequestProp;
import io.vertx.core.AsyncResult;
import io.vertx.core.Handler;
import io.vertx.core.json.JsonObject;

import java.util.concurrent.CompletableFuture;

/**
 * <p>Package:com.rayeye.core.rpc</p>
 * <p>Title: RPCService</p>
 * <p>Description: rpc 公共接口类</p>
 * <p>Copyright: Copyright (c) 2017</p>
 *
 * @author Neil.Zhou
 * @version 1.0
 * @date 2017/4/21 16:32
 */
public interface RPCService {
    /**
    * <p>Method: asyncService</p>
    * <p>Description: 异步调用服务</p>
    * @param args 参数
    * @param method 需要调用的方法
    * @param handler 回调函数
    * @author Neil.Zhou
    * @date 2017/4/21 16:47
    */
    @RequestProp(timeout = 10000, retry = 2)
    void asyncService(JsonObject args, String method, Handler<AsyncResult<JsonObject>> handler) throws Exception;
    /**
     * <p>Method: futureService</p>
     * <p>Description: 同步调用服务</p>
     * @param args 参数
     * @param method 需要调用的方法
     * @author Neil.Zhou
     * @date 2017/4/21 16:47
     */
    @RequestProp(timeout = 10000, retry = 2)
    CompletableFuture<JsonObject> futureService(JsonObject args, String method) throws Exception;
}
